package com.woniu.microchargeserver.common.mapper;

import com.woniu.microcommonsserver.entity.BuildInfoEntity;
import com.woniu.microcommonsserver.entity.SpaceInfoEntity;
import org.apache.ibatis.annotations.*;

import java.util.List;

/**peoject 微服务的mapper
 * @author: hejie
 * @date: 2021/1/30 8:03
 * @description:
 */
@Mapper
public interface ProjectMapper {
    /**
     * 查询所有的build：如 宏泰大厦
     * @return
     */
    @ResultType(BuildInfoEntity.class)
    @Select("select id,name from build_info")
    List<BuildInfoEntity> findAllBuild();

    /**
     * 根据“build_info中的id”查询属于该build的所有building(如3号楼，即rank为1的SpaceInfoEntity)
     * rank=1
     * @author hejie
     * @param bId：build_info中的id
     * @return
     */
    @ResultType(SpaceInfoEntity.class)
    @Select("select id,rank,abbreviation from space_info where rank=1 and fk_build_id = #{bId}")
    List<SpaceInfoEntity> findBuildingByBid(Long bId);

    /**
     * 根据“build_info中的id”、rank为1的id  查询属于该build某个building下的所有房间(如“水青花都小区-11号楼-5单元-8层-802”，即rank为4的SpaceInfoEntity)
     * 思路：根据bId和buildingId、buildingAbbreviation查询：其中“buildingAbbreviation查询”是rank为1的“大楼简称”（如13号楼）
     * @author hejie
     * @param bId：build_info中的id。
     * @param buildingId 在space_info中rank为1，如“13号楼”
     * @param buildingAbbreviation  是rank为1的“大楼简称”（如13号楼）
     * @return
     */
    @ResultType(SpaceInfoEntity.class)
    @Select("select s.id,s.rank,s.abbreviation,s.fullname from space_info as s,build_info as b " +
            "where s.rank=4 " +
            "and s.fk_build_id = #{bId} " +
            "and s.fullname like concat(b.name,'-',#{buildingAbbreviation},'%')")
    List<SpaceInfoEntity> findRoomByBidAndBuildingId(@Param("bId") Long bId,
                                                      @Param("buildingId") Long buildingId,
                                                      @Param("buildingAbbreviation")String buildingAbbreviation);

    /**
     * 查询1个房间的id（rank为4）：13（为了给roomId初始化）
     * @author hejie
     * @return
     */
    @ResultType(Long.class)
    @Select("select id from space_info where rank=4 limit 0,1")
    Long findAId();

    /**查询所有的 房间（就是房间的List）：List<SpaceInfoEntity>
     * 根据“build_info中的id”查询属于该build的所有building下的所有房间
     * @param bId build的id（小区的id）
     * @param buildingId 大楼的id（如3号楼的id）
     * @param buildingAbbreviation 大楼的简称，如3号楼
     * @param roomName 房间的名字（这里是处理后的，应该是 “水青花都小区-11号楼-5单元-8层-802”；但是前端传入的是 11-5-8-802）
     * @return
     */
    List<SpaceInfoEntity> findRoomsByParams(@Param("bId") Long bId,
                                            @Param("buildingId") Long buildingId,
                                            @Param("buildingAbbreviation")String buildingAbbreviation,
                                            @Param("roomName") String roomName);
    /**
     * 根据“build_info中的id”、rank为1的id  查询属于该build某个building下的所有房间(如“水青花都小区-11号楼-5单元-8层-802”，即rank为4的SpaceInfoEntity)
     * 思路：根据bId和buildingId、buildingAbbreviation查询：其中“buildingAbbreviation查询”是rank为1的“大楼简称”（如13号楼）
     * @author hejie
     * @param bId：build_info中的id。
     * @param buildingId 在space_info中rank为1，如“13号楼”
     * @param buildingAbbreviation  是rank为1的“大楼简称”（如13号楼）
     * @return
     */
    @ResultType(SpaceInfoEntity.class)
    @Select("select s.id,s.rank,s.abbreviation,s.fullname from space_info as s,build_info as b " +
            "where s.rank=4 " +
            "and s.fk_build_id = #{bId} " +
            "and s.fullname like concat(b.name,'-',#{buildingAbbreviation},'%')")
    List<SpaceInfoEntity> findRoomsByBid(@Param("bId") Long bId,
                                                     @Param("buildingId") Long buildingId,
                                                     @Param("buildingAbbreviation")String buildingAbbreviation);

    /**
     * 根据 id，查询spaceInfo
     * @param id
     * @return
     */
    @ResultType(SpaceInfoEntity.class)
    @Select("select id,abbreviation,fullname,build_covered as buildCovered,use_covered as useCovered " +
            "from space_info where id=#{id}")
    SpaceInfoEntity findSpaceById(Long id);
}
